
#sage
n = 16327399979538938065425627121938710541904767036111192807118978185802672839745807778511266965243133039287025116055341375973910685030924594006782621354835306582567901820541591246527468773161892553399248423766327141848489769447427618683164696928318358451254533747280041943283689587732331803718760505732388699649416666565690790691997037919051864209139757408059576578992675267907496436994991887557805956505940931238921997416398850919916421818718215169399203420307617093246406851885298278113980167862962784945591737075670993391568798856498520833705820403718410019375841238254740901259220548035942626718916000525487869227429
c1 = 157449651601296649483325075658493791532881002698092279048459036450493413930912551935558039389463125381045647124014886862134739755203180184194019765992485694977941907702258231680934717838655651039985715667003505474247424715675773658619826217306296258884284231222755654537083523371771934823858161680459104540128
a1 = c1>>151
pbits = 1024
kbits = pbits - a1.nbits()
a1 = a1 << kbits
PR.<x> = PolynomialRing(Zmod(n))
f = x + a1
x0 = f.small_roots(X=2^kbits, beta=0.4)[0]
p = a1+x0
print (f"p={p}")
from Crypto.Util.number import  *
import gmpy2


c2 = 5095344477505153532473569738590974303255623645675497803556252219381937922039495544806509321

flag1 = c1^^int(p)
flag2 =  gmpy2.iroot(c2,2)[0]
print(long_to_bytes(flag1)+long_to_bytes(flag2))